/**
 * \file AGenerationGrillePleine.h
 * \author Catalin BLAJ
 * \author Vincent JACQUEMIN
 * \date 30 Octobre 2013
 *
 * Fichier source AGenerationGrille.h pour le programme du Sudoku.
*/

#ifndef AGENERATIONGRILLE_H
#define AGENERATIONGRILLE_H

#include "SGrille.h"

/*----------------
|  ENUMERATION   |
----------------*/

/**
 * \enum Difficulte
 * \brief Enumération de difficulte de la partie.
 *
*/
typedef enum Difficulte
{
    /*!< Niveau facile. */
    facile,
    /*!< Niveau moyen. */
    moyen,
    /*!< Niveau difficile. */
    difficile,
    /*!< Niveau suicidaire. */
    suicidaire

} Difficulte;



/*-------------------
|     FONCTIONS     |
-------------------*/

/**
 * \brief Remplissage total d'une grille.
 * \param grille : La grille à remplir (donnée-résultat).
 *
 * Cette procédure remplit entièrement et aléatoirement une grille.
 */
void GG_genererSGrille(SGrille* grille);

/**
 * \brief Procédure de retrait des révélés
 * \param grille : Grille dont il faut enlever des révélés (donnée-résultat)
 * \param grilleSolution : Grille originale (donnée)
 * \param difficulte : La difficulté choisie (donnée)
 *
 * Cette procédure prend une grille existante entièrement remplie et va retirer un certain
 * nombre de révélés, et ce en fonction de la difficulté choisie par l'utilisateur.
 */
void GG_retraitRevelesGrille(SGrille* grille, const SGrille* grilleSolution, Difficulte difficulte);

#endif
